Server Scripts

Example:

var ConnectionString = "Server=sympc33;Database=Airflow;User Id=sa;Password=sqladmin";
var database = new Database();
var connection = database.OpenDatabaseConnection(ConnectionString);
var id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, id12, id13, id14, id15, id16, id17, id18, id19, id20;
function OnServerStart() {
  var ob = "server";
  id1 = SubscribeToTag("Boolean1", ob, OnTagValueChange);
  id2 = SubscribeToTag("Boolean2", ob, OnTagValueChange);
  id3 = SubscribeToTag("Boolean3", ob, OnTagValueChange);
  id4 = SubscribeToTag("Boolean4", ob, OnTagValueChange);
  id5 = SubscribeToTag("Sine1", ob, OnTagValueChange);
  id6 = SubscribeToTag("Sine2", ob, OnTagValueChange);
  id7 = SubscribeToTag("Sine3", ob, OnTagValueChange);
  id8 = SubscribeToTag("Sine4", ob, OnTagValueChange);
  id9 = SubscribeToTag("Ramp1", ob, OnTagValueChange);
  id10 = SubscribeToTag("Ramp2", ob, OnTagValueChange);
  id11 = SubscribeToTag("Ramp3", ob, OnTagValueChange);
  id12 = SubscribeToTag("Ramp4", ob, OnTagValueChange);
  id13 = SubscribeToTag("Random1", ob, OnTagValueChange);
  id14 = SubscribeToTag("Random2", ob, OnTagValueChange);
  id15 = SubscribeToTag("Random3", ob, OnTagValueChange);
  id16 = SubscribeToTag("Random4", ob, OnTagValueChange);
  id17 = SubscribeToTag("User1", ob, OnTagValueChange);
  id18 = SubscribeToTag("User2", ob, OnTagValueChange);
  id19 = SubscribeToTag("User3", ob, OnTagValueChange);
  id20 = SubscribeToTag("User4", ob, OnTagValueChange);
//  SubscribeToTag("aaa", ob, OnTagValueChange);
}
				
function OnServerStop() {
  UnSubscribeToTag(id1);
  UnSubscribeToTag(id2);
  UnSubscribeToTag(id3);
  UnSubscribeToTag(id4);
  UnSubscribeToTag(id5);
  UnSubscribeToTag(id6);
  UnSubscribeToTag(id7);
  UnSubscribeToTag(id8);
  UnSubscribeToTag(id9);
  UnSubscribeToTag(id10);
  UnSubscribeToTag(id11);
  UnSubscribeToTag(id12);
  UnSubscribeToTag(id13);
  UnSubscribeToTag(id14);
  UnSubscribeToTag(id15);
  UnSubscribeToTag(id16);
//UnSubscribeToTag(id17);
//UnSubscribeToTag(id18);
//UnSubscribeToTag(id19);
//UnSubscribeToTag(id20);

//UnSubscribeToTag(1000);
}
 
var c = 1;
function OnTagValueChange(tagName, id, value, quality, theObject) {
  WriteToDB(tagName, id, value, quality, theObject, c);
  c++;
 
  if (tagName == "Boolean1" && value == 1) {
    SendEmail();
  }

  if (c == 100) {
    UnSubscribeToTag(id17);
    UnSubscribeToTag(id18);
    UnSubscribeToTag(id19);
    UnSubscribeToTag(id20);
  }
}

function SendEmail() {
  LogInfo("SendEmail");
 
  var client = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587);
  client.Credentials = new System.Net.NetworkCredential("[email protected]", "alexzhangtest");
  client.EnableSsl = true;
 
  var message = new System.Net.Mail.MailMessage();
  message.From = new System.Net.Mail.MailAddress("[email protected]");
  message.To.Add(new System.Net.Mail.MailAddress("[email protected]"));
//message.CC.Add(new System.Net.Mail.MailAddress("[email protected]"));
  message.Subject = "sent from macro";
  message.Body = "Boolean1 is true!!!";
 
  client.Send(message);
 
  LogInfo("SendEmail done");
}

function WriteToDB(tagName, id, value, quality, theObject, c) {
  if (connection == null) return;
  var command = "insert into TestTagValue (Name, Value, Quality, subID, Count) values (";
  if (theObject == null)
    command += GetSqlString(tagName);
  else
   command += GetSqlString(tagName + theObject);
  command += ",";
  command += GetSqlString(value);
  command += ",";
  command += GetSqlString(quality);
  command += ",";
  command += id;
  command += ",";
  command += c;
  command += ")";
  database.ExecuteCommand(connection, command);
}
				
function GetSqlString(value) {
  return "'" + value + "'";
}

function Database() {
  this.OpenDatabaseConnection = function (connectionStr) {
  try {
    LogInfo("Try to connect to " + connectionStr)
    var connection = new System.Data.SqlClient.SqlConnection(connectionStr);
    LogInfo("C: " + connection);
    connection.Open();
    LogInfo("Connected to database: " + connection);
    return connection;
  }
  catch (err) { LogError("Connection Error: " + err); }
  return null;
}

this.ExecuteCommand = function (connection, command) {
  if (connection == null) return;
  try {
//LogInfo("ExecuteCommand: " + command)
    var cmd = new System.Data.SqlClient.SqlCommand(command, connection);
    cmd.ExecuteNonQuery();
  }
  catch (err) { LogError("ExecuteCommand error: " + err); }
  }
}
 

For developers, examples of .NET code to display and set Tag values with WCF can be downloaded from the on-line support site.